#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "trie.c"

/*
int main(void){
	trie *PALAVRAS;
	int achou;
	char palavra[50];
//	srand(time(NULL));
    

	PALAVRAS = trie_new();

	palavra[0]='c';
	palavra[1]='a';
	palavra[2]='r';
	palavra[3]='r';
	palavra[4]='o';
	palavra[5]='s';
	palavra[6]='\0';

	trie_insert(PALAVRAS, palavra);

	palavra[0]='a';
	palavra[1]='m';
	palavra[2]='o';
	palavra[3]='r';
	palavra[4]='e';
	palavra[5]='s';
	palavra[6]='\0';

	trie_insert(PALAVRAS, palavra);

	palavra[0]='c';
	palavra[1]='o';
	palavra[2]='m';
	palavra[3]='i';
	palavra[4]='d';
	palavra[5]='a';
	palavra[6]='\0';
	trie_insert(PALAVRAS, palavra);

	palavra[0]='t';
	palavra[1]='e';
	palavra[2]='s';
	palavra[3]='t';
	palavra[4]='e';
	palavra[5]='s';
	palavra[6]='\0';
	trie_insert(PALAVRAS, palavra);
	
	palavra[0]='c';
	palavra[1]='a';
	palavra[2]='r';
	palavra[3]='l';
	palavra[4]='o';
	palavra[5]='s';
	palavra[6]='\0';
	achou = trie_lookup(PALAVRAS, palavra);
	printf("ACHOU: %d\n", achou);
	achou= trie_num_entries(PALAVRAS);
	printf("Palavras: %d\n", achou);
	trie_remove(PALAVRAS, palavra);
	achou= trie_num_entries(PALAVRAS);
	printf("Palavras: %d\n", achou);

return 0;
}*/


int main(void) {
    //Apontador pos=NULL;
    char c, palavra[50], palavraAux[50];
	int i=0, j=0, k=0, m=0, l=3, letra, tamanhoPalavra, qtPalavras=0, auxtam, qtTotal, caracter;
	float  faltando=0.9;
	time_t start,end;
	trie *PALAVRAS;
	
	srand(time(NULL));
    
	PALAVRAS = trie_new();

	time (&start);	
	//Le as palavras ignorando . , ! ? e salva como minusculas
	while(scanf("%c", &c)>0){
		if(c !=' ' && c !=',' && c !='.' && c !='!' && c !='?' && c!='\n' && c!='-'){
			caracter=c;
			if((caracter>=65 && caracter<=90)||(caracter>=97 && caracter<=122)){
				palavra[i++] = tolower(caracter);
			}
		}
		else if(i!=0){			
			palavra[i] = '\0';	
			if(i<=5)
				if(trie_lookup(PALAVRAS, palavra)==0)
					trie_insert(PALAVRAS, palavra);
			else{
				j=0;
				//Separa a palavra em grupos de 3, e o restante, caso necessario
				while(j<i){
					for(m=0;m<l;m++)
						palavraAux[m]=palavra[j++];
					palavraAux[l]='\0';
					if(trie_lookup(PALAVRAS, palavraAux)==0)
						trie_insert(PALAVRAS, palavraAux);
					auxtam=i-j;
					if(auxtam==4)
						l=4;
					if(auxtam<3)
						l=auxtam;
				}
			}	
			//Zera o contador para começar a ler a proxima palavra
			i=0;
			//Redefine o tamanho default de 3
			l=3;
		}
	}

	qtTotal = trie_num_entries(PALAVRAS);
	time (&end);
	printf("Término de processamento de palavras.\nTempo: %.2lf\nQuantidade total de palavras: %d\n\n", difftime(end,start), qtTotal);
	time (&start);
	//Gera palavras e tenta consumir, enquanto tiverem palavras não geradas
	while(trie_num_entries(PALAVRAS)>0){

		//Determina o tamanho da palavra a ser gerada. Varia de 1 a 5
		tamanhoPalavra = rand()%5+1;

		//Gera a palavra do tamanho determinado
		for(i=0;i<tamanhoPalavra;i++){	
			letra = rand()%26+97;
			palavra[i]=letra;
		}

		palavra[i]='\0';
		
		//verifica se a palavra existe e remove
		if(trie_lookup(PALAVRAS, palavra)!=0)
			trie_remove(PALAVRAS, palavra);

		//Quando chegar em múltiplos de 10%
		if(trie_num_entries(PALAVRAS)==(int)(qtTotal*faltando)){
			time (&end);
			printf("Terminado: %d%% em %.2lf segundos\n", (int)(100-faltando*100), difftime (end,start));
			faltando-=0.1;
		}
	}
	trie_delete(PALAVRAS);

printf("\n\nFIM\n");

return 0;
}
